//
//  MYLoginViewModel.swift
//  swift2.0项目开始
//
//  Created by 龚昕炜 on 16/7/31.
//  Copyright © 2016年 龚昕炜. All rights reserved.
//

import UIKit

class MYLoginViewModel: NSObject {
    
    /** 
        多次用到ViewModel,把它变成单例 
        1.方便调用
        2.防止每次创建对象都去沙盒取model
    */
    static let shareInstance: MYLoginViewModel = MYLoginViewModel()
    
    /** 
        1.创建一个model
        2.赋值
    */
    var model: MYHTTPModel?
    
    /** 
        1.第一次运行的时候，授权成功之后要给model赋值
        2.保存在沙盒里， 去沙盒里取
     */
    var access_token: String? {
//        print(model?.access_token)
        return model?.access_token
    }
    
    /** 判断有没有登录 */
    var isLogin: Bool {
        return model?.access_token == nil ? false : true
    }
    
    /** 初始化的时候给model赋值 */
    private override init() {
        super.init() // 可不写，隐式调用
        model = MYHTTPModel.readModel()
    }
    
    func loadToken(code: String, success: ()->(), failed: (message: String)->()) {
        /**
         
         client_id	true	string	申请应用时分配的AppKey。
         client_secret	true	string	申请应用时分配的AppSecret。
         grant_type	true	string	请求的类型，填写authorization_code
         
         grant_type为authorization_code时
         必选	类型及范围	说明
         code	true	string	调用authorize获得的code值。
         redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
         */
        let parameters = ["client_id": "866510465",
            "client_secret": "201955bc2d418fc6d824c31014e53c60",
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": "http://www.baidu.com"
        ]
        
        MYHTTPClient.shareInstance.request(.POST, URLString: "https://api.weibo.com/oauth2/access_token", parameters: parameters, progress: nil, success: { (_, JSON) -> Void in
//            printLog(JSON)
            
            if let userDict = JSON {
                
                let count = MYHTTPModel(dict: userDict as! [String : AnyObject])
                
                //                printLog(account)
                self.loadUserInfo(count, success: success, failed: failed)
            }
            
            }) { (_, error) -> Void in
                printLog(error)
                failed(message: error.description)
            }
    }
    
    @objc private func loadUserInfo(model: MYHTTPModel, success: ()->(), failed: (message: String)->()) {
        
        /**
         请求方式
         GET
         请求参数
         参数	描述
         access_token	采用OAuth授权方式为必填参数，其他授权方式不需要此参数，OAuth授权后获得
         uid	需要查询的用户ID
         */
        let URLString = "https://api.weibo.com/2/users/show.json"
        
        guard let token = model.access_token, uid = model.uid else {
            return
        }
        
        let params = ["access_token": token, "uid": uid]
        
        MYHTTPClient.shareInstance.request(.GET, URLString: URLString, parameters: params, progress: nil, success: { (_, JSON) -> Void in
            
            if let userInfo = JSON {
//                printLog(userInfo)
                let dict = userInfo as! [String: AnyObject]
                /**
                name	友好显示名称
                avatar_large	用户头像地址（大图），180×180像素
                */
                model.screen_name = dict["name"] as? String
                model.profile_image_url = dict["avatar_large"] as? String
                
                /** 归档前给model赋值 */
                self.model = model
                /** 归档存储 */
                model.saveUserInfo()
                
                success()
            }
            
            }) { (_, error) -> Void in
                printLog(error)
                failed(message: error.description)
        }
        
    }

    
}
